#pragma once
namespace xu
{//T&,T*
	template<class Iterator ,class Ref,class Ptr>
	struct Reverse_iterator
	{
		typedef Reverse_iterator<Iterator, Ref ,Ptr> Self;
		
		Iterator _it;

		Reverse_iterator(Iterator it)
			:_it(it)
		{}

		Ref operator*()
		{
			Iterator tmp = _it;
			return *(--tmp);
		}

		Ptr operator->()
		{
			return *(operator*());
		}

		Self& operator++()
		{
			--_it;
			return *this;
		} 

		Self& operator--()
		{
			++_it;
			return *this;
		}
		bool operator!=(const Self& x)
		{
			return _it != x._it;
		}
	};
}